package com.yitiao.base;

public class StringCodeTest {
    //    public static void main(String[] args) {
//        String str1 = "hashcode";
//        String str2 = "hashcode";
//        System.out.println(str1==str2);
//        System.out.println(str1.hashCode());
//        Object o = new Object();
//        System.out.println(o.hashCode());
//        System.out.println(System.identityHashCode(str1));
//        System.out.println(System.identityHashCode(str2));
//    }
//    public static void main(String[] args) {
//        String str1= "abc";
//        String str2= new String("abc");
//        String str3= str2.intern();
//        System.out.println((str1 == str2));
//        System.out.println((str2 == str3));
//        System.out.println((str1 == str3));
//    }

//    public static void main(String[] args) {
//        String str1 = new String("jay,cay");//会在堆中有一个，在字符串常量池中有一个
//        str1.intern();//此时这行代码不会往字符串常量池中存放，因为字符串常量池中已经有一个相同值的对象
////        str1 = str1.intern();    此时str1将指向常量池中的对象，同时原来堆中的string对象因为没有引用会被回收
//        String str2 = "jay,cay";
//        System.out.println(str1 == str2);
//
//        String str3 = new String("aa") + new String("bb");//字符串常量池中不会有aabb
//        str3.intern();//将堆中的aabb的引用存放在字符串常量池中
//        String str4 = "aabb";
//        System.out.println(str3 == str4);
//    }

    public static void main(String[] args) {
//        String str= "ab" + "cd" + "ef";
//        String str7 = new StringBuilder("ja").append("va").toString();
//        String str3 = new String("aa") + new String("bb");

//        String str5 = new StringBuilder("计算机").append("软件").toString();
//        str5.intern();
//        String str6 = "计算机软件";
//        System.out.println(str5 == str6);
//
        String str7 = new StringBuilder("ja").append("va").toString();
        str7.intern();
//        String str8 = "java";
//        System.out.println(str7 == str8);
    }
}
